package runtime

import (
	"time"
)

// 工作流相关消息

// DeployWorkflowMessage 是部署工作流的消息
type DeployWorkflowMessage struct {
	// WorkflowID 是工作流ID
	WorkflowID string
	// Definition 是工作流定义
	Definition []byte
	// DeployerID 是部署者ID
	DeployerID string
	// DeployedAt 是部署时间
	DeployedAt time.Time
}

// DeployWorkflowResponse 是部署工作流的响应
type DeployWorkflowResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
	// WorkflowID 是工作流ID
	WorkflowID string
}

// StartWorkflowMessage 是启动工作流的消息
type StartWorkflowMessage struct {
	// WorkflowID 是工作流ID
	WorkflowID string
	// Parameters 是工作流参数
	Parameters []byte
	// StarterID 是启动者ID
	StarterID string
	// StartedAt 是启动时间
	StartedAt time.Time
}

// StartWorkflowResponse 是启动工作流的响应
type StartWorkflowResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
	// RunID 是运行ID
	RunID string
}

// StopWorkflowMessage 是停止工作流的消息
type StopWorkflowMessage struct {
	// WorkflowID 是工作流ID
	WorkflowID string
	// RunID 是运行ID
	RunID string
	// StopperID 是停止者ID
	StopperID string
	// StoppedAt 是停止时间
	StoppedAt time.Time
}

// StopWorkflowResponse 是停止工作流的响应
type StopWorkflowResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
}

// GetWorkflowStatusMessage 是获取工作流状态的消息
type GetWorkflowStatusMessage struct {
	// WorkflowID 是工作流ID
	WorkflowID string
	// RunID 是运行ID
	RunID string
}

// GetWorkflowStatusResponse 是获取工作流状态的响应
type GetWorkflowStatusResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
	// Status 是工作流状态
	Status interface{}
}

// 节点相关消息

// NodeJoinedMessage 是节点加入的消息
type NodeJoinedMessage struct {
	// NodeID 是节点ID
	NodeID string
	// NodeInfo 是节点信息
	NodeInfo map[string]string
	// JoinedAt 是加入时间
	JoinedAt time.Time
}

// NodeLeftMessage 是节点离开的消息
type NodeLeftMessage struct {
	// NodeID 是节点ID
	NodeID string
	// LeftAt 是离开时间
	LeftAt time.Time
}

// NodeFailedMessage 是节点失败的消息
type NodeFailedMessage struct {
	// NodeID 是节点ID
	NodeID string
	// FailedAt 是失败时间
	FailedAt time.Time
	// Reason 是失败原因
	Reason string
}

// NodeStatusChangedMessage 是节点状态变更的消息
type NodeStatusChangedMessage struct {
	// NodeID 是节点ID
	NodeID string
	// OldStatus 是旧状态
	OldStatus string
	// NewStatus 是新状态
	NewStatus string
	// ChangedAt 是变更时间
	ChangedAt time.Time
}

// 集群相关消息

// ClusterStateChangedMessage 是集群状态变更的消息
type ClusterStateChangedMessage struct {
	// Nodes 是节点列表
	Nodes []string
	// ChangedAt 是变更时间
	ChangedAt time.Time
}

// LeaderElectedMessage 是领导者选举的消息
type LeaderElectedMessage struct {
	// LeaderID 是领导者ID
	LeaderID string
	// ElectedAt 是选举时间
	ElectedAt time.Time
	// Term 是任期
	Term int64
}

// 任务相关消息

// ScheduleTaskMessage 是调度任务的消息
type ScheduleTaskMessage struct {
	// TaskID 是任务ID
	TaskID string
	// WorkflowID 是工作流ID
	WorkflowID string
	// RunID 是运行ID
	RunID string
	// TaskType 是任务类型
	TaskType string
	// Parameters 是任务参数
	Parameters []byte
	// SchedulerID 是调度者ID
	SchedulerID string
	// ScheduledAt 是调度时间
	ScheduledAt time.Time
}

// ScheduleTaskResponse 是调度任务的响应
type ScheduleTaskResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
	// NodeID 是执行节点ID
	NodeID string
}

// TaskCompletedMessage 是任务完成的消息
type TaskCompletedMessage struct {
	// TaskID 是任务ID
	TaskID string
	// WorkflowID 是工作流ID
	WorkflowID string
	// RunID 是运行ID
	RunID string
	// NodeID 是执行节点ID
	NodeID string
	// Result 是任务结果
	Result []byte
	// CompletedAt 是完成时间
	CompletedAt time.Time
}

// TaskFailedMessage 是任务失败的消息
type TaskFailedMessage struct {
	// TaskID 是任务ID
	TaskID string
	// WorkflowID 是工作流ID
	WorkflowID string
	// RunID 是运行ID
	RunID string
	// NodeID 是执行节点ID
	NodeID string
	// Error 是错误消息
	Error string
	// FailedAt 是失败时间
	FailedAt time.Time
}

// 资源相关消息

// AllocateResourceMessage 是分配资源的消息
type AllocateResourceMessage struct {
	// ResourceType 是资源类型
	ResourceType string
	// Quantity 是资源数量
	Quantity string
	// WorkflowID 是工作流ID
	WorkflowID string
	// TaskID 是任务ID
	TaskID string
	// AllocatorID 是分配者ID
	AllocatorID string
	// AllocatedAt 是分配时间
	AllocatedAt time.Time
}

// AllocateResourceResponse 是分配资源的响应
type AllocateResourceResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
	// AllocationID 是分配ID
	AllocationID string
}

// ReleaseResourceMessage 是释放资源的消息
type ReleaseResourceMessage struct {
	// AllocationID 是分配ID
	AllocationID string
	// ReleaserID 是释放者ID
	ReleaserID string
	// ReleasedAt 是释放时间
	ReleasedAt time.Time
}

// ReleaseResourceResponse 是释放资源的响应
type ReleaseResourceResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
}

// 心跳相关消息

// HeartbeatMessage 是心跳消息
type HeartbeatMessage struct {
	// NodeID 是节点ID
	NodeID string
	// Status 是节点状态
	Status string
	// Metrics 是节点指标
	Metrics map[string]interface{}
	// Timestamp 是时间戳
	Timestamp time.Time
}

// HeartbeatResponse 是心跳响应
type HeartbeatResponse struct {
	// Success 表示操作是否成功
	Success bool
	// Error 是错误消息
	Error string
	// ClusterState 是集群状态
	ClusterState map[string]interface{}
}
